Kokaの例: global変数
例
code:koka(js)
// 値としてeffectを用意
effect val width : int
// widthを内部で使っている関数。widthは引数で受け取っているわけではない
fun pretty-internal( line : string ) : width string
line.truncate(width)
// 上記の関数を呼び出すhandler。width=40と設定して実行している
fun pretty-thin(d : doc) : string
with val width = 40
pretty(d)
値をeffectで表現することで、外側から値のinjectionができる
安全なglobal変数とも見れる
引数でバケツリレーする必要もなく、globalなmutable変数とも違う
型で明示されるので設定し忘れがない
pretty-thin以上の呼び出し元からはwidthを変更することはできない
スコープが限られている
そのglobal変数は、どこからでも変更可能、にはなってなくて安心安全